home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / dev / lang / Python16.lha / Python-1.6 / Lib / Python1.6 / distutils / command / bdist.py < prev    next >
Encoding:
Python Source  |  2000-08-02  |  3.9 KB  |  120 lines

  1. """distutils.command.bdist
  2.  
  3. Implements the Distutils 'bdist' command (create a built [binary]
  4. distribution)."""
  5.  
  6. # created 2000/03/29, Greg Ward
  7.  
  8. __revision__ = "$Id: bdist.py,v 1.16 2000/08/02 01:44:44 gward Exp $"
  9.  
  10. import os, string
  11. from types import *
  12. from distutils.core import Command
  13. from distutils.errors import *
  14. from distutils.util import get_platform
  15.  
  16.  
  17. def show_formats ():
  18.     """Print list of available formats (arguments to "--format" option).
  19.     """
  20.     from distutils.fancy_getopt import FancyGetopt 
  21.     formats=[]
  22.     for format in bdist.format_commands:
  23.         formats.append(("formats=" + format, None,
  24.                         bdist.format_command[format][1]))
  25.     pretty_printer = FancyGetopt(formats)
  26.     pretty_printer.print_help("List of available distribution formats:")
  27.  
  28.  
  29. class bdist (Command):
  30.  
  31.     description = "create a built (binary) distribution"
  32.  
  33.     user_options = [('bdist-base=', 'b',
  34.                      "temporary directory for creating built distributions"),
  35.                     ('formats=', None,
  36.                      "formats for distribution (comma-separated list)"),
  37.                     ('dist-dir=', 'd',
  38.                      "directory to put final built distributions in "
  39.                      "[default: dist]"),
  40.                    ]
  41.  
  42.     help_options = [
  43.         ('help-formats', None,
  44.          "lists available distribution formats", show_formats),
  45.     ]
  46.  
  47.     # The following commands do not take a format option from bdist
  48.     no_format_option = ('bdist_rpm',)
  49.  
  50.     # This won't do in reality: will need to distinguish RPM-ish Linux,
  51.     # Debian-ish Linux, Solaris, FreeBSD, ..., Windows, Mac OS.
  52.     default_format = { 'posix': 'gztar',
  53.                        'nt': 'zip', }
  54.  
  55.     # Establish the preferred order (for the --help-formats option).
  56.     format_commands = ['rpm', 'gztar', 'bztar', 'ztar', 'tar',
  57.                        'wininst', 'zip']
  58.  
  59.     # And the real information.
  60.     format_command = { 'rpm':   ('bdist_rpm',  "RPM distribution"),
  61.                        'gztar': ('bdist_dumb', "gzip'ed tar file"),
  62.                        'bztar': ('bdist_dumb', "bzip2'ed tar file"),
  63.                        'ztar':  ('bdist_dumb', "compressed tar file"),
  64.                        'tar':   ('bdist_dumb', "tar file"),
  65.                        'wininst': ('bdist_wininst',
  66.                                    "Windows executable installer"),
  67.                        'zip':   ('bdist_dumb', "ZIP file"),
  68.                      }
  69.  
  70.  
  71.     def initialize_options (self):
  72.         self.bdist_base = None
  73.         self.formats = None
  74.         self.dist_dir = None
  75.  
  76.     # initialize_options()
  77.  
  78.  
  79.     def finalize_options (self):
  80.         # 'bdist_base' -- parent of per-built-distribution-format
  81.         # temporary directories (eg. we'll probably have
  82.         # "build/bdist.<plat>/dumb", "build/bdist.<plat>/rpm", etc.)
  83.         if self.bdist_base is None:
  84.             build_base = self.get_finalized_command('build').build_base
  85.             plat = get_platform()
  86.             self.bdist_base = os.path.join (build_base, 'bdist.' + plat)
  87.  
  88.         self.ensure_string_list('formats')
  89.         if self.formats is None:
  90.             try:
  91.                 self.formats = [self.default_format[os.name]]
  92.             except KeyError:
  93.                 raise DistutilsPlatformError, \
  94.                       "don't know how to create built distributions " + \
  95.                       "on platform %s" % os.name
  96.  
  97.         if self.dist_dir is None:
  98.             self.dist_dir = "dist"
  99.             
  100.     # finalize_options()
  101.  
  102.  
  103.     def run (self):
  104.  
  105.         for format in self.formats:
  106.             try:
  107.                 cmd_name = self.format_command[format][0]
  108.             except KeyError:
  109.                 raise DistutilsOptionError, \
  110.                       "invalid format '%s'" % format
  111.  
  112.             sub_cmd = self.reinitialize_command(cmd_name)
  113.             if cmd_name not in self.no_format_option:
  114.                 sub_cmd.format = format
  115.             self.run_command (cmd_name)
  116.  
  117.     # run()
  118.  
  119. # class bdist
  120.